package models

import (
	"time"

	"gorm.io/datatypes"
	// "github.com/google/uuid" // 如果要使用 UUID 类型
)

// TaskStatus 定义任务状态常量 (模拟 ENUM)
type TaskStatus string

const (
	StatusReceived   TaskStatus = "RECEIVED"
	StatusQueued     TaskStatus = "QUEUED"
	StatusDelivering TaskStatus = "DELIVERING"
	StatusAckPending TaskStatus = "ACK_PENDING"
	StatusCompleted  TaskStatus = "COMPLETED"
	StatusFailed     TaskStatus = "FAILED"
	StatusTimeout    TaskStatus = "TIMEOUT"
)

// Task 存储任务信息
type Task struct {
	// 不使用 gormModel 的 Id，因为主键是 TaskID (UUID)
	// TaskID             uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"task_id"` // 使用 UUID 类型
	TaskID             string         `gorm:"type:varchar(36);primaryKey" json:"task_id"` // 或者使用 string 存储 UUID
	TopicName          string         `gorm:"type:varchar(255);not null;index" json:"topic_name"`
	Payload            datatypes.JSON `gorm:"type:jsonb" json:"payload"`
	Status             TaskStatus     `gorm:"type:varchar(50);not null;default:'RECEIVED';index" json:"status"` // 使用 string 存储状态
	RequireAck         bool           `gorm:"not null" json:"require_ack"`
	ProducerAuthKeyID  *uint          `gorm:"index" json:"producer_auth_key_id"` // 外键字段，允许 NULL
	ConsumerIdentifier string         `gorm:"type:varchar(255)" json:"consumer_identifier"`
	CreatedAt          time.Time      `json:"created_at"` // 手动添加时间戳
	QueuedAt           *time.Time     `json:"queued_at"`
	DeliveredAt        *time.Time     `json:"delivered_at"`
	CompletedAt        *time.Time     `json:"completed_at"`
	LastUpdatedAt      time.Time      `gorm:"index" json:"last_updated_at"` // 手动添加时间戳并加索引
	Metadata           datatypes.JSON `gorm:"type:jsonb" json:"metadata"`
	// DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` // 如果需要软删除

	// --- 关联关系 ---
	// 移除有问题的 Topic 关联
	// Topic   Topic   `gorm:"foreignKey:TopicName;references:TopicName"`
	// 移除有问题的 AuthKey 关联
	// AuthKey AuthKey `gorm:"foreignKey:ProducerAuthKeyID;references:Id"`
}

// TableName 自定义表名
func (Task) TableName() string {
	return "tasks"
}

// AutoMigrate 自动迁移
func AutoMigrate() {
	return
}
